package com.estagio.bean;

import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;

import com.estagio.entity.Aluno;
import com.estagio.entity.AvaliacaoFisica;
import com.estagio.entity.Cargo;
import com.estagio.entity.Funcionario;
import com.estagio.session.AlunoSession;
import com.estagio.session.AvaliacaoFisicaSession;
import com.estagio.session.FuncionarioSession;

@ManagedBean(name="avaliacaoFisicaBean")
@SessionScoped
public class AvaliacaoFisicaBean {
	
	//AVALIACAO FISICA
	private AvaliacaoFisica avaliacaoFisica = new AvaliacaoFisica();
	private AvaliacaoFisica afSelecionada;
	private DataModel dmAvaliacaoFisica;
	
	//PROFESSOR/FUNCIONARIO
	private Funcionario professor = new Funcionario();
	private DataModel dmProfessor;
	
	//ALUNO
	private Aluno aluno = new Aluno();
	private DataModel dmAluno;
	
	//MEDIDAS
	private Double subescapular1;
	private Double subescapular2;
	private Double subescapular3;
	private Double axilarMedia1;
	private Double axilarMedia2;
	private Double axilarMedia3;
	private Double triceps1;
	private Double triceps2;
	private Double triceps3;
	private Double coxa1;
	private Double coxa2;
	private Double coxa3;
	private Double supraIliaca1;
	private Double supraIliaca2;
	private Double supraIliaca3;
	private Double abdominal1;
	private Double abdominal2;
	private Double abdominal3;
	private Double peitoral1;
	private Double peitoral2;
	private Double peitoral3;

	

	public AvaliacaoFisica getAfSelecionada() {
		return afSelecionada;
	}

	public void setAfSelecionada(AvaliacaoFisica afSelecionada) {
		this.afSelecionada = afSelecionada;
	}

	public DataModel getDmProfessor() {
		return dmProfessor;
	}

	public void setDmProfessor(DataModel dmProfessor) {
		this.dmProfessor = dmProfessor;
	}

	public Funcionario getProfessor() {
		return professor;
	}

	public void setProfessor(Funcionario professor) {
		this.professor = professor;
	}

	public AvaliacaoFisicaBean() {
		this.avaliacaoFisica = new AvaliacaoFisica();
	}
	

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public DataModel getDmAluno() {
		return dmAluno;
	}

	public void setDmAluno(DataModel dmAluno) {
		this.dmAluno = dmAluno;
	}

	public AvaliacaoFisica getAvaliacaoFisica() {
		return avaliacaoFisica;
	}

	public void setAvaliacaoFisica(AvaliacaoFisica avaliacaoFisica) {
		this.avaliacaoFisica = avaliacaoFisica;
	}

	public DataModel getDmAvaliacaoFisica() {
		return dmAvaliacaoFisica;
	}

	public void setDmAvaliacaoFisica(DataModel dmAvaliacaoFisica) {
		this.dmAvaliacaoFisica = dmAvaliacaoFisica;
	}


	public Double getSubescapular1() {
		return subescapular1;
	}

	public void setSubescapular1(Double subescapular1) {
		this.subescapular1 = subescapular1;
	}

	public Double getSubescapular2() {
		return subescapular2;
	}

	public void setSubescapular2(Double subescapular2) {
		this.subescapular2 = subescapular2;
	}

	public Double getSubescapular3() {
		return subescapular3;
	}

	public void setSubescapular3(Double subescapular3) {
		this.subescapular3 = subescapular3;
	}

	public Double getAxilarMedia1() {
		return axilarMedia1;
	}

	public void setAxilarMedia1(Double axilarMedia1) {
		this.axilarMedia1 = axilarMedia1;
	}

	public Double getAxilarMedia2() {
		return axilarMedia2;
	}

	public void setAxilarMedia2(Double axilarMedia2) {
		this.axilarMedia2 = axilarMedia2;
	}

	public Double getAxilarMedia3() {
		return axilarMedia3;
	}

	public void setAxilarMedia3(Double axilarMedia3) {
		this.axilarMedia3 = axilarMedia3;
	}

	public Double getTriceps1() {
		return triceps1;
	}

	public void setTriceps1(Double triceps1) {
		this.triceps1 = triceps1;
	}

	public Double getTriceps2() {
		return triceps2;
	}

	public void setTriceps2(Double triceps2) {
		this.triceps2 = triceps2;
	}

	public Double getTriceps3() {
		return triceps3;
	}

	public void setTriceps3(Double triceps3) {
		this.triceps3 = triceps3;
	}

	public Double getCoxa1() {
		return coxa1;
	}

	public void setCoxa1(Double coxa1) {
		this.coxa1 = coxa1;
	}

	public Double getCoxa2() {
		return coxa2;
	}

	public void setCoxa2(Double coxa2) {
		this.coxa2 = coxa2;
	}

	public Double getCoxa3() {
		return coxa3;
	}

	public void setCoxa3(Double coxa3) {
		this.coxa3 = coxa3;
	}

	public Double getSupraIliaca1() {
		return supraIliaca1;
	}

	public void setSupraIliaca1(Double supraIliaca1) {
		this.supraIliaca1 = supraIliaca1;
	}

	public Double getSupraIliaca2() {
		return supraIliaca2;
	}

	public void setSupraIliaca2(Double supraIliaca2) {
		this.supraIliaca2 = supraIliaca2;
	}

	public Double getSupraIliaca3() {
		return supraIliaca3;
	}

	public void setSupraIliaca3(Double supraIliaca3) {
		this.supraIliaca3 = supraIliaca3;
	}

	public Double getAbdominal1() {
		return abdominal1;
	}

	public void setAbdominal1(Double abdominal1) {
		this.abdominal1 = abdominal1;
	}

	public Double getAbdominal2() {
		return abdominal2;
	}

	public void setAbdominal2(Double abdominal2) {
		this.abdominal2 = abdominal2;
	}

	public Double getAbdominal3() {
		return abdominal3;
	}

	public void setAbdominal3(Double abdominal3) {
		this.abdominal3 = abdominal3;
	}

	public Double getPeitoral1() {
		return peitoral1;
	}

	public void setPeitoral1(Double peitoral1) {
		this.peitoral1 = peitoral1;
	}

	public Double getPeitoral2() {
		return peitoral2;
	}

	public void setPeitoral2(Double peitoral2) {
		this.peitoral2 = peitoral2;
	}

	public Double getPeitoral3() {
		return peitoral3;
	}

	public void setPeitoral3(Double peitoral3) {
		this.peitoral3 = peitoral3;
	}

	//AVALIACAO FISICA
	public void saveEditAvaliacaoFisica() {
		AvaliacaoFisicaSession avaliacaoFisicaRN = new AvaliacaoFisicaSession();
		AvaliacaoFisica avaliacaoFisica = this.avaliacaoFisica;		
		String mensagem = avaliacaoFisicaRN.save(avaliacaoFisica);

		FacesMessage faces = new FacesMessage(mensagem);
		System.out.println(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}	

	public void saveAvaliacaoFisica() {
		AvaliacaoFisicaSession avaliacaoFisicaRN = new AvaliacaoFisicaSession();
		AvaliacaoFisica avaliacaoFisica = this.avaliacaoFisica;		
		
		String mensagem = avaliacaoFisicaRN.save(avaliacaoFisica);
		
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);	
		RequestContext.getCurrentInstance().update("messages");
	}
	
	public void calcula() {
		AvaliacaoFisicaSession session = new AvaliacaoFisicaSession();
		this.avaliacaoFisica.setAbdominal(session.calculaDobra(this.abdominal1, this.abdominal2, this.abdominal3));
		this.avaliacaoFisica.setSubescapular(session.calculaDobra(this.subescapular1, this.subescapular2, this.subescapular3));
		this.avaliacaoFisica.setAxilarMedia(session.calculaDobra(this.axilarMedia1, this.axilarMedia2, this.axilarMedia3));
		this.avaliacaoFisica.setTriceps(session.calculaDobra(this.triceps1, this.triceps2, this.triceps3));
		this.avaliacaoFisica.setCoxa(session.calculaDobra(this.coxa1, this.coxa2, this.coxa3));
		this.avaliacaoFisica.setSupraIliaca(session.calculaDobra(this.supraIliaca1, this.supraIliaca2, this.supraIliaca3));
		this.avaliacaoFisica.setPeitoral(session.calculaDobra(this.peitoral1, this.peitoral2, this.peitoral3));
		this.avaliacaoFisica.setGordura(session.calculaGordura(this.avaliacaoFisica));
		this.avaliacaoFisica.setMassaGorda(session.calculaMassaGorda(this.avaliacaoFisica));
		this.avaliacaoFisica.setMassaMagra(session.calculaMassaMagra(this.avaliacaoFisica));
		this.avaliacaoFisica.setPesoMinimo(session.calculaPesoMinimo(this.avaliacaoFisica));
		this.avaliacaoFisica.setPesoMaximo(session.calculaPesoMaximo(this.avaliacaoFisica));
		RequestContext.getCurrentInstance().update("fildsetMedidas");
		
	}

	public String deleteAvaliacaoFisica() {
		return "consultarAvaliacaoFisica";
	}

	
	//ALUNO
	public DataModel findAluno() {
		AlunoSession session = new AlunoSession();
		List<Aluno> lista = session.find(this.aluno);
		this.dmAluno = new ListDataModel(lista);
		return this.dmAluno;
	}
		
	public void selectAluno() {
		this.avaliacaoFisica.setAluno((Aluno) this.dmAluno.getRowData());
		RequestContext.getCurrentInstance().update("formManterAvaliacaoFisica:pgAluno");
		RequestContext.getCurrentInstance().execute("dialogConsultarAluno.hide()");
	}
	
	//PROFESSOR
	public DataModel findFuncionario() {
		FuncionarioSession session = new FuncionarioSession();
		Cargo cargo = new Cargo();
		cargo.setIdCargo(1); //1 - Professor
		List<Funcionario> lista = session.find(this.professor, cargo);
		this.dmProfessor = new ListDataModel(lista);
		return this.dmProfessor;
	}
		
	public void selectFuncionario() {
		this.avaliacaoFisica.setFuncionario((Funcionario) this.dmProfessor.getRowData());
		RequestContext.getCurrentInstance().update("formManterAvaliacaoFisica:pgFuncionario");
		RequestContext.getCurrentInstance().execute("dialogConsultarFuncionario.hide()");
	}
	
	public DataModel findAvaliacaoFisica() {
		AvaliacaoFisicaSession session = new AvaliacaoFisicaSession();
		List<AvaliacaoFisica> lista = session.find(this.avaliacaoFisica);
		this.dmAvaliacaoFisica = new ListDataModel(lista);
		return this.dmAvaliacaoFisica;
	}
	
	//METODOS DIALOGS
	public void addProfessor() {
		this.avaliacaoFisica.setFuncionario((Funcionario) this.dmProfessor.getRowData());
		RequestContext.getCurrentInstance().update("formManterAvaliacaoFisica:pgProfessor");
		RequestContext.getCurrentInstance().execute("dialogProfessor.hide()");
	}
	
	//INVOCAR TELAS
	public String newAvaliacaoFisica() {
		this.avaliacaoFisica = new AvaliacaoFisica();
		this.avaliacaoFisica.setDtAvaliacao(new Date());
		this.avaliacaoFisica.setAluno(new Aluno());
		this.avaliacaoFisica.setFuncionario(new Funcionario());
		this.subescapular1 = null;
		this.subescapular2 =  null;
		this.subescapular3 = null;
		this.axilarMedia1 = null;
		this.axilarMedia2 = null;
		this.axilarMedia3 = null;
		this.triceps1 = null;
		this.triceps2 = null;
		this.triceps3 = null;
		this.coxa1 = null;
		this.coxa2 = null;
		this.coxa3 = null;
		this.supraIliaca1 = null;
		this.supraIliaca2 = null;
		this.supraIliaca3 = null;
		this.abdominal1 = null;
		this.abdominal2 = null;
		this.abdominal3 = null;
		this.peitoral1 = null;
		this.peitoral2 = null;
		this.peitoral3 = null;
		return "manterAvaliacaoFisica";
	}
	
	public String consultarAvaliacaoFisica() {
		this.avaliacaoFisica = new AvaliacaoFisica();
		this.avaliacaoFisica.setAluno(new Aluno());
		this.avaliacaoFisica.setFuncionario(new Funcionario());
		return "consultarAvaliacaoFisica";
	}
	

	public String editarAvaliacaoFisica() {
		this.avaliacaoFisica = (AvaliacaoFisica) this.dmAvaliacaoFisica.getRowData();
		return "editarAvaliacaoFisica";
	}
	
	
	public void clean() {
		this.avaliacaoFisica = new AvaliacaoFisica();
	}
	
	//OPEN DIALOGS
	public void openDialogProfessor() {
		RequestContext.getCurrentInstance().update("idDialogProfessor");
		RequestContext.getCurrentInstance().execute("dialogProfessor.show()");
	}
	
	public void openDialogConsultarAluno() {
		RequestContext.getCurrentInstance().update("idDialogConsultarAluno");
		RequestContext.getCurrentInstance().execute("dialogConsultarAluno.show()");
	}

}
